package cn.emailChat.ai.domain;

import jakarta.persistence.Entity;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.UpdateTimestamp;

import java.time.LocalDateTime;

/**
 * @Description 对话摘要表，记录“短期记忆”
 * @Author susu
 * @Date 2025/8/20
 */

@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
// 创建索引
@Table(
        indexes = {
                @Index(name = "idx_cs_contact_updated", columnList = "contact_email, updated_at"),
                @Index(name = "idx_cs_subject_norm", columnList = "subject_norm")
        }
)
public class ConversationSummary {

    /**
     * 线程ID：
     * - 优先用根邮件的 Message-ID（或其稳定hash）；
     * - 新建时可用 hash(fromEmail + subjectNorm + firstMessageId)。
     */
    @Id
    private String threadId;

    /** 联系人邮箱（统一小写存储） */
    private String contactEmail;

    /**
     * 主题归一化（去 Re:/Fwd: 等多语言前缀、统一大小写、清理噪声）
     * 用于“候选线程”匹配与检索。
     */
    private String subjectNorm;

    /**
     * 滚动摘要正文（200~400 中文字符/约 300~600 tokens 控制）
     * 建议每次“问—答”后用小提示词更新。
     */
    @Lob
    @Column(columnDefinition = "LONGTEXT")
    private String summary;

    /**
     * 线程状态：open/closed
     * - open：仍在活跃沟通
     * - closed：检测到“谢谢/已解决”或超时无交互
     */
    private String status = "open";

    /** 最近一次参与的邮件 message-id（便于定位）——可选字段 */
    private String lastMessageId;

    /** 最近一次更新（由 Hibernate 自动维护） */
    @UpdateTimestamp
    private LocalDateTime updatedAt;

    private LocalDateTime createdAt;

    private LocalDateTime closedAt;

    /** 上次将本线程摘要蒸馏同步到联系人画像的时间（防抖&幂等） */
    private LocalDateTime lastProfileSyncAt;
}
